package com.project.server;

import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

/**
 * 处理读取流的请求类
 */
public class Request {
    /**客户端请求的URL路径*/
    private String url;
    /**封装表单数据的Map集合*/
    private Map<String,String> paramMap = new HashMap<>();
    public Request(InputStream in){
        try {
            byte[] byteArray = new byte[2048];
            //将流中的数据读取到字节数组
            in.read(byteArray);

            String str = new String(byteArray).trim();
            System.out.println(str);

            if(str.startsWith("GET")){//判断请求方式
                this.pressGet(str);
            }
            else if(str.startsWith("POST")){
                this.pressPost(str);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    private void pressPost(String str) {
        String[] array = str.split("\\s+");
        this.url = array[1].substring(1);
        this.fullMap(array[array.length - 1]);
    }

    private void pressGet(String str) {
        String[] array = str.split("\\s+");
        //截取第一个/
        String s = array[1].substring(1);
        if(s.indexOf("?") == -1){//客户端请求的是文件
            this.url = s;
        }
        else{//客户端请求的是业务组件
            String[] arr = s.split("[?]");//{0,1}
            this.url = arr[0];
            this.fullMap(arr[1]);
        }
    }

    /**
     * 将表单字符串（a=1&b=2）封装成map集合
     * @param s 表单字符串
     */
    private void fullMap(String s) {
        String[] array = s.split("&");
        for(String str : array){
            String[] sarray = str.split("=");
            if(sarray.length == 2){
                this.paramMap.put(sarray[0],sarray[1]);
            }
            else{
                this.paramMap.put(sarray[0],"");
            }
        }
    }

    public String getUrl() {
        return url;
    }

    /**
     * 根据表单名，得到表单值
     * @param key 表单名
     * @return 表单值
     */
    public String getParameter(String key){
        return this.paramMap.get(key);
    }

    @Override
    public String toString() {
        return "Request{" +
                "url='" + url + '\'' +
                ", paramMap=" + paramMap +
                '}';
    }
}
